
<h2>What is FreeWPC?</h2>

<p><b>FreeWPC</b> is a free platform for developing replacement game ROMs for
Bally/Williams pinball machines based on the WPC (Williams Pinball Controller)
chip.  FreeWPC provides the foundation for building new ROMs with custom game
rules.</p>

<p>FreeWPC only replaces the CPU game ROM (the U6 chip), which contains all
of the game code and dot matrix text/graphics.  In particular, sounds and
music are NOT included in this chip, so you'll have to get by with
reusing the same sounds/music as are provided normally.  This
project is ambitious enough; perhaps others could work on replacement
audio?</p>

<p>Some important features of FreeWPC:</p>

<ul>
<li>It is 100% Williams-free code, written from scratch.</li>
<li>Code is written mostly in C, thanks to the availability of a halfway
decent <a href="/gcc6809">C compiler for the 6809 CPU</a>.
In some places, assembly language
code is used for performance or to do some really low-level things.
Using C over assembler should allow more people to get involved with the
project.</li>
<li>Most development can be done under Linux or under Windows using the
Cygwin UNIX emulation suite.  Some tasks require installation of other 
programs, for example, if you want to make your own fonts.</li>
<li>The system is designed to be flexible and extensive.  All generations
of WPC will be supported, except for alphanumeric games.  Multiple machines 
can be targeted using the same common core "system" code.</li>
<li>Eventually, code should be able to run on an actual pinball machine;
however, for now, FreeWPC ROMs should only be used in emulators such as
PinMAME.  <b>Repeat: do not attempt to put a FreeWPC ROM in a 
real machine!</b> I guarantee you, it won't work and you <b>WILL</b> cause 
irreparable damage to your game, yourself, your house, etc... 
You have been warned.</li>
</ul>

<h2>Status</h2>

<p><b>NEW</b>: Version 0.10 has been uploaded.  Only the TZ ROM has significant changes.
This is mostly a bug fix release.</p>

<p>In 2005, FreeWPC development focused on the core infrastructure necessary
to support a pinball machine.  The majority of this core work is now
working, although probably not optimal.</p>

<p>In mid 2006, the focus shifted to implementing a playable game.
That game is <b>Twilight Zone</b>, and work is still in progress.
Throughout the development of the game, lots of core system bugs have
been fixed, and some new features have been added.</p>

<p>Twilight Zone Version was 0.09 is the first public release that
incorporates the new game rules, albeit incomplete in many places.
The hope is that by providing a <i>playable</i> version, rather than
just a working test mode, that people will be more inclined to try it
out, find bugs, and be able to work on new features.</p>

<p>FreeWPC is still only developed by one person, yours truly.
I am still looking for capable programmers willing to help.</p>


<h2>Screenshots</h2>

<p>Here are a few screenshots to illustrate what's available.</p>
<ul>
<li><a href="cap_test.png">The FreeWPC test mode running in PinMAME.</a></li>
<li><a href="cap_scores2.png">The score screen running in PinMAME.</a></li>
<li><a href="cap_freewpc_logo.png">A sample image file, created using GIMP.</a></li>
<li><a href="cap_edit_game.png">An editor window, showing some of the game functions coded.</a></li>
</ul>

<h2>Binary Installation (PinMAME or Visual PinMAME)</h2>

<p>You will need to copy the ROM file into your PinMAME <b>roms</b>
directory so that PinMAME can find it.  The location of this directory
depends on how you installed PinMAME.  These directories typically contain
ZIP files of the game ROM and sound ROMs; you'll need to unzip the file,
replace the game ROM, then zip it back.  Make sure to save your original
version of the ROM file for when you want to revert back to the real deal.</p>

<h2>Source Installation</h2>

<p>Source code is released under the <b>GNU General Public License</b>,
which means basically that you can download it and use it for free.

<p>If you just want to browse the code, use the
<a href="/websvn/">Subversion repository browser</a>.  This requires
no additional software to be installed.</p>

<p>If you want
to download the code directly and you already have Subversion installed,
see the <a href="/freewpc/subversion.html">Subversion starter page</a> and
the <a href="/freewpc/build.html">build instructions</a>.</p>

<h2>Internal Design</h2>

<p>I've written a short paper on 
<a href="freewpc_design.html">the design of FreeWPC</a>.
New developers should definitely take a look at this before getting
involved.  It covers some basic embedded systems concepts as well
as describing how some of the features are implemented.  It also explains
some of the inner workings of the WPC chip, as that is the key to
understanding how all of the I/O works.</p>

<h2>Known Limitations</h2>

<p>The current Preview Releases lack a lot of things; they are intended to
demonstrate only the most basic functionality.  Here are some of the
areas that need addressing:</p>

<ul>
<li>General illumination is implemented but there is no support for
controlling the brightness.  Note that Visual Pinball does not
show brightness levels, so this will be hard to debug outside of a
real machine.</li>
<li>Only a few dot matrix transitional effects are present; some of
the ones there are also buggy.</li>
<li>Many of the test mode functions are still missing.</li>
<li>Other than Twilight Zone, the games are not playable; most of the efforts 
have been put into the test mode and very basic functionality.  Even
Twilight Zone is not completely playable yet.</li>
</ul>

<h2>Want to Help?</h2>

<p>If you are interested in working on this project, please contact me
at <a href="mailto:freewpc@oddchange.com">freewpc@oddchange.com</a>.  
Developers should be familiar
with basic embedded systems programming concepts and the C programming
language.  Familiarity with 6809 assembler is <i>highly</i> recommended.
Also, knowledge of WPC pinball machines is expected, but I'm assuming
anyone interested would probably meet that requirement.</p>

<p>All development is currently done under the Linux operating system.
I use <a href="subversion">Subversion</a> for source control.
Developers will also need to grab my <a href="/gcc6809">GCC for 6809</a>
compiler, an assembler, and a linker.  See the 6809 pages for information
on how to download and install the compiler.</p>

